package org.grottarossa.tms.aeroflow.ui.core.viewmanager;

import com.vaadin.ui.Component;
import com.vaadin.ui.Window;

/**
 * <p>Gli implementatori di questa interfaccia hanno il compito di inserire una view
 * (che pu� essere qualsiasi {@link com.vaadin.ui.Component componente Vaadin}) all'interno di un opportuno {@link com.vaadin.ui.ComponentContainer ComponentContainer}
 * e di gestirne la visualizzazione e il nascondimento/chiusura.
 * </p>
 *
 * <p>Le implementazioni di questa interfaccia possono avvalersi della classe base {@link ViewManagerBase}.</p>
 *
 * @see ViewManagerBase
 *
 * @author 
 *
 */
public interface IViewManager
{
	/**
	 * @return la view correntemente visualizzata da questo {@link IViewManager}.
	 */
	Component getCurrentView();

	/**
	 * Visualizza una determinata view all'interno di un {@link com.vaadin.ui.ComponentContainer ComponentContainer}
	 * @param view la view da visualizzare
	 * @return
	 */
	Window enterView(Component view);

	/**
	 * Chiude/nasconde una view attualmente aperta in questo {@link IViewManager}.
	 * @param view
	 */
	void exitView(Component view);

	/**
	 * Registra un nuovo listener
	 * @param listener
	 */
	void addListener(IViewManagerListener listener);

	/**
	 * Deregistra un listener registrato
	 * @param listener
	 */
	void removeListener(IViewManagerListener listener);
}
